Java的序列化是指,將物件的狀態訊息轉換為可以存儲或傳輸的格式;當物件被序列化後,就可以被存放在檔案中,或者透過網路傳輸到另一個系統,而反序列化則是這些過程的逆操作,可以從序列化格式中,恢復到物件的狀態。
要讓Java類別的物件被序列化,此類別必須實現Serializable介面。
Serializable介面是一個標記介面,不包含任何方法。
public class ExampleClass implements Serializable {
// class details...
}
Java提供ObjectOutputStream類別,可將物件序列化為位元組流,這些位元組流可以存儲在檔案中或透過網路進行傳輸。
ExampleClass object = new ExampleClass();
try (FileOutputStream fos = new FileOutputStream("serializedObject.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(object);
}
使用ObjectInputStream,可以從先前序列化的位元組流中恢復物件的狀態。
try (FileInputStream fis = new FileInputStream("serializedObject.ser");
ObjectInputStream ois = new ObjectInputStream(fis)) {
ExampleClass recoveredObject = (ExampleClass) ois.readObject();
}
要留意的是,並不是所有的物件都可以被序列化,只有實現Serializable介面的類別物件才可以進行序列化。
若某些數據不想被序列化,則可以使用transient關鍵字標記。